import java.util.*;

/**
 * author: MaHX
 * date: 2019/10/30/17:06
 * description:
 *
 * Comparable接口位于 java.lang包下，Comparator接口位于java.util包下。
 *
 *     Comparable:    内部比较器，一个类如果想要使用	Collections.sort(list)
 *                     方法进行排序，则需要实现该接口
 *
 *     Comparator:    外部比较器用于对那些没有实现Comparable接口或者对已经实现
 *                  的Comparable中的排序规则不满意进行排序.无需改变类的结构，更加灵活。（策略模式）
 **/
public class ComparatorAndComparable {
    public static void main(String[] args) {
//        List<Integer> list = new ArrayList<>();
//        list.add(5);
//        list.add(9);
//        list.add(1);
//        list.add(4);
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("小马",7));
        personList.add(new Person("小红",1));
        personList.add(new Person("小军",4));
        personList.add(new Person("小李",2));
//        Collections.sort(list); // 默认升序，若要降序则自定义comparator
//        Collections.sort(list, new Comparator<Integer>() { //自定义Comparator
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2 - o1;
//            }
//        });
        Collections.sort(personList);
        Iterator<Person> iterator = personList.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next().toString());
        }
    }
    static class Person implements Comparable<Person>{
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public int compareTo(Person o) {
            return this.age - o.age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }


}
